#define _CRT_SECURE_NO_WARNINGS 1


//#include<algorithm>
//#include<vector>
//#include<math.h>
//#include<iostream>
//
//using namespace std;
//
//bool Func(int n)
//{
//    for (int i = 2; i < sqrt(n); i++)
//    {
//        if (n % i == 0)
//        {
//            return false;
//        }
//    }
//    return true;
//}
//
//int main()
//{
//    int n = 0;
//    cin >> n;
//    vector<int> v;
//    while (n)
//    {
//        v.push_back(n % 10);
//        n /= 10;
//    }
//    reverse(v.begin(), v.end());
//    int size = v.size();
//    for (int i = 0; i < size - 1; i++)
//    {
//        v.push_back(v[i]);
//    }
//    int val = 0;
//    for (auto& e : v)
//    {
//        val = val * 10 + e;
//    }
//    if (Func(val))
//    {
//        cout << "prime" << endl;
//    }
//    else
//    {
//        cout << "noprime" << endl;
//    }
//
//    return 0;
//}


#include<iostream>

using namespace std;

int waysToStep(int n)
{
    int mod = 1000000007;
    int a = 1, b = 1, c = 2, d = 0;
    if (n == 1)
    {
        return 1;
    }
    else if (n == 2)
    {
        return 2;
    }
    for (int i = 3; i <= n; i++)
    {
        a %= mod;
        b %= mod;
        c %= mod;
        d = a + b + c;
        a = b;
        b = c;
        c = d;
    }
    return d;
}

int main()
{
    cout << waysToStep(61) << endl;

	return 0;
}